package offer2

/**
https://leetcode.cn/problems/dui-cheng-de-er-cha-shu-lcof/?envType=study-plan

剑指 Offer 28. 对称的二叉树
请实现一个函数，用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样，那么它是对称的。

例如，二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2   2
/ \ / \
3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2   2
\   \
3    3
*/

func isSymmetric(root *TreeNode) bool {
	if root == nil { //如果是空节点,直接返回true
		return true
	}
	return compare(root, root) //对比节点
}

func compare(n1, n2 *TreeNode) bool {
	if n1 == nil && n2 == nil { //如果都为空，则是对称的
		return true
	}
	if n1 == nil || n2 == nil { //如果其中一个不为空，则不是对称的
		return false
	}

	//判断两个节点的值是否相等 && 递归比较(n1.左节点, n2.右节点) && 递归比较(n1.右节点, n2.左节点)
	return n1.Val == n2.Val && compare(n1.Left, n2.Right) && compare(n2.Left, n1.Right)
}
